home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / tcxl551.arc / TCXL_INC.EXE / lha / INC / TCXLMNU.H < prev    next >
Text File  |  1990-10-01  |  13KB  |  204 lines

  1. /*=====[ The TesSeRact(TM) CXL User Interface Development System ]======*
  2.  | Copyright (c) 1987-1990, Innovative Data Concepts. All Rights Reserved
  3.  |
  4.  | This Library is part of IDC's TesSeRact Development Tools product
  5.  | line. For information about other IDC products, call 1-215-884-3373.
  6.  *----------------------------------------------------------------------*
  7.  | <TCXLmnu.h> : Public definitions and prototypes for TCXL Menu system
  8.  | (User level).
  9.  *----------------------------------------------------------------------*
  10.  | PGS : $Id: tcxlmnu.h 5.51 90/10/01 00:00:00 MLM Release Locker: MLM $
  11.  | $Log:    tcxlmnu.h $
  12.  | Revision 5.51  90/10/01  00:00:00  MLM
  13.  | TCXL 5.51
  14.  | 
  15.  *======================================================================*/
  16. #ifndef  _TCXLmnu_
  17. #  define   _TCXLmnu_ 1
  18. #  ifndef   _TCXLwnd_
  19. #    include <TCXLwin.h>   /* window definitions */
  20. #  endif
  21. #  ifndef   _TCXLkey_
  22. #    include <TCXLkey.h>   /* keyboard definitions */
  23. #  endif
  24.                               /*- MnuEnd() menu type -------*/
  25. #define  MNU_HOR     0x01     /* horizontal                 */
  26. #define  MNU_VER     0x02     /* vertical                   */
  27. #define  MNU_OMN     0x07     /* omnidirectional            */
  28. #define  MNU_PUL     0x08     /* pull-down                  */
  29. #define  MNU_NQS     0x10     /* disable quick selection    */
  30. #define  MNU_SAV     0x20     /* save last bar position     */
  31. #define  MNU_DSP     0x40     /* always display             */
  32. #define  MNU_USE     0x80     /* use current window         */
  33.                               /*- MnuItm() feature mask ----*/
  34. #define  ITM_PUL     0x01     /* pull-down attached         */
  35. #define  ITM_NSL     0x02     /* not selectable             */
  36. #define  ITM_AFT     0x04     /* close after select         */
  37. #define  ITM_ALL     0x08     /* close all when selected    */
  38. #define  ITM_BEF     0x10     /* close before select        */
  39. #define  ITM_DSP     0x20     /* redisplay                  */
  40.  
  41. /*------------------[ Data objects and access macros ]------------------*/
  42.  
  43. TYP   struct   Idf   IdfT, *IdfP;      /* object, pointer types */
  44. TYP   struct   Mctl  MctlT;
  45. TYP   struct   Mdf   MdfT, *MdfP;
  46.  
  47. struct   Mctl           /*-[ Menu-control object ]----------*/
  48. {  MdfP     mtop;       /* 00|00 : top menu                 */
  49.    MdfP     mcur;       /* 02|04 : current menu             */
  50.    IntT     mmnu;       /* 04|08 : menu level               */
  51.    IntT     mitm;       /* 06|0A : item level               */
  52. };                      /* 08|0C ]--------------------------*/
  53.  
  54. GBL   MctlT CDC   _MnuCtl;    /*- global menu-control object -----------*/
  55. #define  MctlTop  (_MnuCtl.mtop)                      /* top menu       */
  56. #define  MctlCur  (_MnuCtl.mcur)                      /* current menu   */
  57. #define  MctlMnu  (_MnuCtl.mmnu)                      /* menu level     */
  58. #define  MctlItm  (_MnuCtl.mitm)                      /* item level     */
  59.  
  60. struct   Mdf            /*-[ Menu-definition object ]----*/
  61. {  MdfP     mprv;       /* 00|00 : previous menu         */
  62.    MdfP     mnxt;       /* 02|04 : next menu             */
  63.    MdfP     mpar;       /* 04|08 : parent menu           */
  64.    IdfP     mtop;       /* 06|0C : head item             */
  65.    IdfP     mcur;       /* 08|10 : current item          */
  66.    VfvCP    mopn;       /* 0A|14 : post-open function    */
  67.    TagT     mtag;       /* 0C|18 : selected tag ID       */
  68.    VposT    mbeg;       /* 0E|1A : start position        */
  69.    VposT    mend;       /* 10|1C : end position          */
  70.    BoxT     mfrm;       /* 12|1E : border                */
  71.    AtrT     mwat;       /* 14|20 : window attr           */
  72.    BytT     mtyp;       /* 15|21 : type mask             */
  73.    BytT     mwid;       /* 16|22 : bar width             */
  74.    BytT     mofs;       /* 17|23 : text offset           */
  75.    AtrT     mtat;       /* 18|24 : text attr             */
  76.    AtrT     msat;       /* 19|25 : select char attr      */
  77.    AtrT     mnat;       /* 1A|26 : non-select attr       */
  78.    AtrT     mbat;       /* 1B|27 : bar attribute         */
  79. };                      /* 1C|28 ]-----------------------*/
  80. #define  MdfPrv(m)   ((m)->mprv)                   /* previous MdfT     */
  81. #define  MdfNxt(m)   ((m)->mnxt)                   /* next MdfT         */
  82. #define  MdfPar(m)   ((m)->mpar)                   /* parent MdfT       */
  83. #define  MdfTop(m)   ((m)->mtop)                   /* head IdfT         */
  84. #define  MdfCur(m)   ((m)->mcur)                   /* current IdfT      */
  85. #define  MdfOpn(m)   ((m)->mopn)                   /* post-open func    */
  86. #define  MdfTag(m)   ((m)->mtag)                   /* selected tag ID   */
  87. #define  MdfBeg(m)   ((m)->mbeg)                   /* start position    */
  88. #define  MdfBegW(m)  (VposW(MdfBeg(m)))            /*    word           */
  89. #define  MdfBegC(m)  (VposC(MdfBeg(m)))            /*    col            */
  90. #define  MdfBegR(m)  (VposR(MdfBeg(m)))            /*    row            */
  91. #define  MdfEnd(m)   ((m)->mend)                   /* end position      */
  92. #define  MdfEndW(m)  (VposW(MdfEnd(m)))            /*    word           */
  93. #define  MdfEndC(m)  (VposC(MdfEnd(m)))            /*    col            */
  94. #define  MdfEndR(m)  (VposR(MdfEnd(m)))            /*    row            */
  95. #define  MdfFrm(m)   ((m)->mfrm)                   /* border            */
  96. #define  MdfFrmT(m)  (BoxTyp(MdfFrm(m)))           /*    type           */
  97. #define  MdfFrmA(m)  (BoxAtr(MdfFrm(m)))           /*    attr           */
  98. #define  MdfWat(m)   ((m)->mwat)                   /* window attr       */
  99. #define  MdfTyp(m)   ((m)->mtyp)                   /* type mask         */
  100. #define  MdfHor(m)   (0 != (MdfTyp(m) & MNU_HOR))  /*    horizontal     */
  101. #define  MdfVer(m)   (0 != (MdfTyp(m) & MNU_VER))  /*    vertical       */
  102. #define  MdfOmn(m)   (0 != (MdfTyp(m) & MNU_OMN))  /*    omnidirectional*/
  103. #define  MdfPul(m)   (0 != (MdfTyp(m) & MNU_PUL))  /*    pull-down      */
  104. #define  MdfNqs(m)   (0 != (MdfTyp(m) & MNU_NQS))  /*    no quick select*/
  105. #define  MdfSav(m)   (0 != (MdfTyp(m) & MNU_SAV))  /*    save bar pos   */
  106. #define  MdfDsp(m)   (0 != (MdfTyp(m) & MNU_DSP))  /*    always display */
  107. #define  MdfUse(m)   (0 != (MdfTyp(m) & MNU_USE))  /*    use current    */
  108. #define  MdfWid(m)   ((m)->mwid)                   /* bar width         */
  109. #define  MdfOfs(m)   ((m)->mofs)                   /* text offset       */
  110. #define  MdfTat(m)   ((m)->mtat)                   /* text attribute    */
  111. #define  MdfSat(m)   ((m)->msat)                   /* select char attr  */
  112. #define  MdfNat(m)   ((m)->mnat)                   /* non-select attr   */
  113. #define  MdfBat(m)   ((m)->mbat)                   /* bar attribute     */
  114.  
  115. struct  Idf                /*-[ Item-definition object ]----*/
  116. {  IdfP  iprv;             /* 00|00 : previous IdfT         */
  117.    IdfP  inxt;             /* 02|04 : next IdfT             */
  118.    MdfP  isub;             /* 04|08 : submenu MdfT          */
  119.    ChrP  istr;             /* 06|0C : selection text        */
  120.    ChrP  itxt;             /* 08|10 : description text      */
  121.    VfvCP isel;             /* 0A|14 : "select" function     */
  122.    VfvCP ibef;             /* 0C|18 : "before" function     */
  123.    VfvCP iaft;             /* 0E|1C : "after"  function     */
  124.    KeyT  ikey;             /* 10|20 : hot key               */
  125.    TagT  itag;             /* 12|22 : tag ID                */
  126.    TagT  ihlp;             /* 14|24 : help tag              */
  127.    VposT ispo;             /* 16|26 : select text position  */
  128.    VposT idpo;             /* 18|28 : description position  */
  129.    AtrT  idat;             /* 1A|2A : description attribute */
  130.    BytT  ichr;             /* 1B|2B : quick select char     */
  131.    BytT  imsk;             /* 1C|2C : feature mask          */
  132.    BytT  ilen;             /* 1D|2D : selection-text length */
  133.    VposT icpo;             /* 1E|2E : center position       */
  134. };                         /* 20|30 ]-----------------------*/
  135. #define  IdfPrv(i)   ((i)->iprv)                   /* previous IdfT     */
  136. #define  IdfNxt(i)   ((i)->inxt)                   /* next IdfT         */
  137. #define  IdfSub(i)   ((i)->isub)                   /* submenu MdfT      */
  138. #define  IdfStr(i)   ((i)->istr)                   /* selection text    */
  139. #define  IdfTxt(i)   ((i)->itxt)                   /* description text  */
  140. #define  IdfSel(i)   ((i)->isel)                   /* "select" function */
  141. #define  IdfBef(i)   ((i)->ibef)                   /* "before" function */
  142. #define  IdfAft(i)   ((i)->iaft)                   /* "after"  function */
  143. #define  IdfKey(i)   ((i)->ikey)                   /* hot key           */
  144. #define  IdfTag(i)   ((i)->itag)                   /* tag ID            */
  145. #define  IdfHlp(i)   ((i)->ihlp)                   /* help tag          */
  146. #define  IdfSpo(i)   ((i)->ispo)                   /* text pos          */
  147. #define  IdfSpoW(i)  (VposW(IdfSpo(i)))            /*    word           */
  148. #define  IdfSpoC(i)  (VposC(IdfSpo(i)))            /*    col            */
  149. #define  IdfSpoR(i)  (VposR(IdfSpo(i)))            /*    row            */
  150. #define  IdfDpo(i)   ((i)->idpo)                   /* description pos   */
  151. #define  IdfDpoW(i)  (VposW(IdfDpo(i)))            /*    word           */
  152. #define  IdfDpoC(i)  (VposC(IdfDpo(i)))            /*    col            */
  153. #define  IdfDpoR(i)  (VposR(IdfDpo(i)))            /*    row            */
  154. #define  IdfDat(i)   ((i)->idat)                   /* description attr  */
  155. #define  IdfChr(i)   ((i)->ichr)                   /* quick select char */
  156. #define  IdfMsk(i)   ((i)->imsk)                   /* feature mask      */
  157. #define  IdfPul(i)   (0 != (IdfMsk(i) & ITM_PUL))  /*    pull-down      */
  158. #define  IdfNsl(i)   (0 != (IdfMsk(i) & ITM_NSL))  /*    not selectable */
  159. #define  IdfCaf(i)   (0 != (IdfMsk(i) & ITM_AFT))  /*    close after    */
  160. #define  IdfCal(i)   (0 != (IdfMsk(i) & ITM_ALL))  /*    close all      */
  161. #define  IdfCbf(i)   (0 != (IdfMsk(i) & ITM_BEF))  /*    close before   */
  162. #define  IdfDsp(i)   (0 != (IdfMsk(i) & ITM_DSP))  /*    redisplay      */
  163. #define  IdfLen(i)   ((i)->ilen)                   /* text length       */
  164. #define  IdfCpo(i)   ((i)->icpo)                   /* center position   */
  165. #define  IdfCpoW(i)  (VposW(IdfCpo(i)))            /*    word           */
  166. #define  IdfCpoC(i)  (VposC(IdfCpo(i)))            /*    col            */
  167. #define  IdfCpoR(i)  (VposR(IdfCpo(i)))            /*    row            */
  168.  
  169. /*------------------------[ Function prototypes ]-----------------------*/
  170.  
  171. #ifdef __cplusplus            /* no mangling, please */
  172.    extern "C" {
  173. #endif
  174.                                        /*- Menu-item Functions ---------*/
  175. IdfP        ItmCur(NOARG);             /* Current item pointer          */
  176. IntT  CTYP  ItmDis(TagT id);           /* Disable item <id>             */
  177. IntT  CTYP  ItmDsp(TagT id);           /* Re-display item <id>          */
  178. IntT  CTYP  ItmEna(TagT id);           /* Enable item <id>              */
  179. IntT  CTYP  ItmFun(VfvCP bf,           /* Assign "before" and "after"   */
  180.    VfvCP af);                          /*    functions                  */
  181. ChrP  CTYP  ItmGet(TagT id);           /* Get item <id> text            */
  182. IdfP  CTYP  ItmKey(KeyT kc);           /* Find item by hot-key <kc>     */
  183. IdfP  CTYP  ItmLoc(TagT id);           /* Find item <id>                */
  184. IntT  CTYP  ItmNxt(TagT id);           /* Goto item <id>                */
  185. IntT  CTYP  ItmSet(TagT id, ChrP tp);  /* Set item <id> text            */
  186. IntT  CTYP  ItmTxt(IntT wr, IntT wc,   /* Add text description          */
  187.    IntT at, ChrP ps);
  188.                                        /*- Menu Functions --------------*/
  189. IntT  CTYP  MnuAct(NOARG);             /* Define menu in active window  */
  190. IntT  CTYP  MnuBeg(IntT sr, IntT sc,   /* Define menu                   */
  191.    IntT er, IntT ec, IntT bt, IntT ba, IntT wa, VfvCP fo);
  192. MdfP        MnuCur(NOARG);             /* Current menu pointer          */
  193. IntT  CTYP  MnuEnd(TagT ti, IntT mt,   /* End menu definition           */
  194.    IntT bw, IntT tp, IntT ta, IntT sa, IntT na, IntT ba);
  195. IntT  CTYP  MnuItm(IntT wr, IntT wc,   /* Define menu item              */
  196.    ChrP ps, IntT sc, TagT id, IntT fm, VfvCP sf, WrdT hk, TagT he);
  197. IntT  CTYP  MnuShow(NOARG);            /* Display/process menu          */
  198. #define  MnuCur()  (MctlCur)
  199. #define  ItmCur()  (MdfCur(MctlCur))
  200. #ifdef __cplusplus
  201.    }
  202. #endif
  203. #endif   /* _TCXLmnu_ : End of TCXLmnu.h */
  204.